"""
auth:xgt-python
datetime:2021/11/9
爬取小说网站 下载神器
"""
# 导入相关的模块
import requests     # 数据请求模块 pip install requests
import parsel  # 数据解析模块
from tqdm import tqdm # 进度条显示模块


# 获取所有小说章节的url地址
# url = 'https://www.biqugee.com/book/53245/'
# response = requests.get(url)
# selector = parsel.Selector(response.text)
# # attr 属性选择器 通过selector 里面css方法 提取所有 list 下面 dd标签 里面的 a标签里面 href属性
# href = selector.css('#list dd a::attr(href)').getall() # 返回列表数据  集体缩减
# name = selector.css('#info h1::text').get()
# for index in tqdm(href): # 所以小说章节的url地址
#     index_url = 'https://www.biqugee.com' + index
#     # print(index_url)
#
#
#
# # 只要获取所有的 小说的章节url地址 就可以获取所有小说内容
# # url = 'https://www.biqugee.com/book/12564/4856870/html' # 字符串数据类型
#
#     response= requests.get(index_url)
#     # print(response.text)
#     # 解析数据方法: re正则表达式：提取字符串数据的内容   css选择器  xpath  根据标签来提取内容
#     # json数据 可以直接字典取值
#     selector = parsel.Selector(response.text)
#     title = selector.css('#wrapper > div.content_read > div > div.bookname > h1::text').get()
#     content_list = selector.css('#content::text').getall()
#     # 把列表转换成字符串 .json方法 \n 换行符 回车
#     content = '\n'.join(content_list) # 小说内容
#     # title 每一章节名字
#     with open(name + '.txt',mode='a',encoding='utf-8') as flie:
#         flie.write(title)
#         flie.write('\n')
#         flie.write(content)
#         flie.write('\n')
#         """
#         第一章 章节名字
#             小说内容
#             xxxx
#         第二章 风起云岚
#         """
#
#         # print('正在保存',title)



def get_response(html_url):
    """发送请求的函数"""
    response = requests.get(html_url)
    return response


def get_novel_url(html_url):
    """获取所有章节url地址"""
    response = get_response(html_url)
    selector = parsel.Selector(response.text)
    href = selector.css('#list dd a::attr(href)').getall()  # 返回列表数据  集体缩减
    return href


def get_novel_content(html_url):
    """获取小说的内容"""
    response = get_response(html_url)
    selector = parsel.Selector(response.text)
    # 才可以调用 selector 对象里面 css选择器方法  进行解析数据
    title = selector.css('#wrapper > div.content_read > div > div.bookname > h1::text').get()
    content_list = selector.css('#content::text').getall()  # 获取所有
    content = '\n'.join(content_list) # 小说内容
    novel_content = [title,content]
    return novel_content


def save(name,title,content):
    """'保存数据"""
    with open(name + '.txt', mode='a', encoding='utf-8') as flie:
        flie.write(title)
        flie.write('\n')
        flie.write(content)
        flie.write('\n')


def main(html_url):
    """主函数"""
    response_1 = get_response(html_url)
    selector = parsel.Selector(response_1.text)
    name = selector.css('#info h1::text').get()
    href = get_novel_url(html_url)
    for index in tqdm(href):
        index_url = 'https://www.biqugee.com' + index
        novel_content = get_novel_content(index_url) # 调用了获取小说内容函数
        save(name,novel_content[0],novel_content[1]) # 调用了  保存函数


url = 'https://www.biqugee.com/book/53855/'
main(url)

